約 2,222,683 件
https://w.atwiki.jp/how_to_use_ffmpegx/pages/26.html
ffmpegXのなかみ ffmpegXはLinuxで使われている多数の動画関連ソフトにMacOSX用のボタンやウィンドウをくっつけたものだ。 Linuxソフトの基本はコマンドラインによるCUIなので敷居が高く、こうしたGUIラッパーの存在はありがたい。(*1) 同種のものは他にも有るが内包するLinuxソフトの多さ、多才さで群を抜くと思う。 反面、別個に開発されたLinuxソフトに統合的なGUIをデザインするのは大変な作業らしく、整合性の無い設定もできてしまう。この点では Vob→AVIに特化したD-Vision3や、DVD→AVI/MP4に特化したHandBrakeの方が解りやすい。 とはいえ、QuickTimeそのものが不安定な中、貴重な存在だ。 重要な二つをあげて見る。いわばLinuxのQuickTimeだ。 MPlayer/MEncoder 種類:Mplayerは動画再生。Mencoderはトランスコーダ。オープンソース、フリー。 位置:liblary/Application Support/ffmpegX/の中。 公式サイト:http //www.mplayerhq.hu/homepage/design7/news.html LinuxにもWinにもGUI版がある。 本体は再生用のMPlayerとエンコーダのMEncoderに分かれる。 Macで使えるGUIとしてはffmpegXとD-Vision3。どちらもMEncoderに重心がある。 再生用はMPlayer OSX。こちらは正規プロジェクトに引き継がれた。 基本的に.avi出力に特化してきた経緯から、他のコンテナへの出力は苦手で、まだ問題が多い。 ビデオフィルタの類いが充実しており、AVIコンテナでは音ズレもほとんど無いため、品質のよいものが作れる。 使えるコデックも鬼のように多く、ffmpegX0.0.9t版にも〜GUIからは使えないが〜SNOWという超絶遅いものが入っている。開発レベルでは、まだナンバーリリースが無いx264をMEncoderに内蔵する形で出そうとの動きもある。 本来はソースコードから自力でビルドするもの。 この場合、事前にxvid,x264,lame,faacなどなどの膨大な外部ライブラリを、一個ずつ対応バージョンを調べながらビルドする必要があるのでlinuxでもそれなりに大変らしい。ついた渾名が「地獄から来たソフト」。 Macの場合、開発者もユーザも少ないため、さらに難易度が増す。2005/秋の時点では自力でビルドしても音関連の不具合が出る。解決するには自前でパッチを作る能力(MacOSX固有の構造に関する知識とC言語)が必要だ。 この意味でもffmpegX版は貴重。 ffmpeg 種類:linuxのトランスコーダ。これもオープンソース、フリー 位置:ffmpegXのパッケージ内。 公式サイト:http //ffmpeg.sourceforge.net/index.php 対応するコンテナ/映像・音声コデックとも気違いじみた多さで、メジャーどころで存在しないのはWMV9くらい、、だったが対応しつつある。AVC/H.264は当然。 コデックとコンテナの開発に主眼があり、それぞれlibavcodec,libavformatと呼ばれる一連のコデック/コンテナ群を持つ。例えばlibavcodec MPEG-4はDivX/XviDと互換。 フィルタ類は充実していないが、携帯電話の.3gpやPSP向けの.mp4を作る人にとっては重宝千万なようだ。 当方は画質と音ズレ問題に不満を感じたため深入りしていない。 なお、ffmpegXはこのffmpegのMac用GUIラッパーとしてスタートした。 ややこしいが、ffmpegXの事をffmpegと書くと無用の混乱を生じるので気をつけて欲しい。 まとめると、 ffmpegはコデック/コンテナに強く、 MPlayer/MEncoderはエンコード/デコード/mux/demux/フィルタに強い。 キミタチ、二人合わせて一蓮托生だねぇ、、、と思っていたら鯖も同居だそうで、2005/夏にMPlayerの鯖が落ちた時に一蓮に托生していた。 他のソフトでffmpegX内蔵のffmpeg/MEncoderを必要とするものが複数ある。 また、linuxはもちろん、Win界でもMeGUI、携帯動画変換君といったラッパー(後者はQTも使う)が存在するため、そうしたソフトの動向を追う事で用法などのヒントを得る事も可能だ。 参考リンク Mac-MPEG Exporter TNG Win-携帯動画変換君上記内、ffmpeg Wiki
https://w.atwiki.jp/how_to_use_ffmpegx/pages/29.html
ページ名に「/」を使うと仮想フォルダ。 ここは「ffmpegX/」以下のページ一覧。 ffmpegX関連ページ一覧 ffmpegXとは 0.0.9t 0.0.9t/0.留意事項 0.0.9t/1.インストール 0.0.9t/2.Summary tab 0.0.9t/3.Video tab 0.0.9t/4.Audio tab 0.0.9t/5.Filters tab 0.0.9t/6.Options tab 0.0.9t/7.tools tab 0.0.9t/8.設定のめやす 0.0.9u 0.0.9u/1.インストール
https://w.atwiki.jp/hondashi/pages/43.html
FFmpeg on Windows Windows上でFFmpegをコンパイルするのが目的です MSysとMinGWを使った方法を順を追って書いていきます Cygwinは使いません、CygwinはUnixライクなシステムです WindowsでFFmpeg使うし、Unix知らないし 始める前に、下のメッセージを読んで下さい 一つ FFmpegはMSVC++でビルドしませんし、ビルドすることはありません MSVC++はC99準拠じゃありません(C99 C言語の規格ウィキペ)が、FFmpegは開発者の意向により準拠してます このことからもFFmpegのビルドはMSys+MinGWでやらねばならぬのです MinGWで作ったFFmpegのライブラリはC99準拠のコンパイラで作った他のライブラリと同様に扱えます(static、shared共に) これもまたMSVC++ではサポートされていません しかし、C99準拠により近くなるように改造することで、MSVC++でFFmpegのライブラリを使用する事も可能っちゃぁ可能です 二つ このガイドに問題があったらFFmpegのメーリングリストで質問する前にFFmpeg Windows Help Forumで質問すれ 基本的な前準備 このガイドで取り扱う事でもないけど、ほとんどの人は読み飛ばしていいよ "*.tar.gz"と"*.tar.bz2"に対応する書庫解凍ソフトが必要です 特定のフォルダに書庫を解凍する必要があります ここらへん問題なければPreparing the MSys+MinGW systemにどうぞ 7-ZipとWinRARの導入方法が紹介されてますが、省略します 検索とかでこのWikiに辿り着いた人で分からない人は 上記二つのソフト名でググれ 次へ(Introduction)
https://w.atwiki.jp/dgsp/pages/1.html
ffmpeg 小生のためのセルフマニュアル なにぶん小生の英語力のためおぼつかないところは勘弁。 Video option Audio option 3.Advanced Video option おまけ
https://w.atwiki.jp/hondashi/pages/42.html
基本的には http //ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page の、超噛み砕いた意訳 上から順に FFmpeg_Main_Page FFmpeg_Introduction FFmpeg_MSys_MinGW [[FFmpeg_ [[FFmpeg_ [[FFmpeg_ [[FFmpeg_ [[FFmpeg_ [[FFmpeg_
https://w.atwiki.jp/parepan/pages/231.html
ffmpeg-php のconfigureでエラーになった。。。作業途中 PHPコンパイルで enable-shared を指定する必要有り ./configure --disable-debug --with-apxs2=/usr/local/apache2/bin/apxs --with-iconv --enable-mbstring --enable-zend-multibyte --with-pgsql=/usr/local/pgsql --with-zlib --enable-shared make make test make install apache再起動 ffmpeg-phpのソースコードを http //ffmpeg-php.sourceforge.net/ からダウンロード 今回は「ffmpeg-php-0.6.0.tbz2」をDownloadした 解凍 bunzip2 ffmpeg-php-0.6.0.tbz2 tar xvf ffmpeg-php-0.6.0 イントール cd ffmpeg-php-0.6.0 phpize ./configure make make install
https://w.atwiki.jp/how_to_use_ffmpegx/pages/5.html
3. Video tab ここでやること: 映像圧縮方式の選択(使用するエンジン、作成するコンテナ形式、映像ビットレート、解像度など) 3. Video tab3.1. Video Codec3.1.1.Video Codec 3.2. ビットレート計算機 3.3. Video parameters 3.4. その他のオプション 3.1. Video Codec かなり不正確な図なので細部を信用しないように。 ffmpegXは内部に「エンジン」をいくつか内蔵している。 各エンジンは扱えるコデック(映像/音声)とコンテナに得手不得手がある。 Video tabとAudio tabでそれぞれコデックを選ぶと、整合性の無い組み合わせでも指定できてしまう。 Summary tabのクイックプリセットで、目的のエンジン、コデック(映像/音声)、コンテナの組み合わせをいっぺんに済ませる事ができるので、まずそちらで目的の形式を選び、このタブでは「Bitrate calculator」と「Video parametors」の調節にとどめるのが吉。 3.1.1.Video Codec エンコードに使う「エンジン」と出力する形式を指定。前から順番に、ファイルフォーマット(MPEG4)、コンテナ形式と拡張子(AVI)、エンジン(mencoder)。選択肢は以下の通り。 MPEG4 [.AVI] (ffmpeg)"libavcodec mpeg-4"として知られるコデック。DivX 4 /5再生機と互換性がある。エンジンのffmpegは、ffmpegオープンソースプロジェクト製の大変高速なエンジンで、Altivec に最適化済み。MPEG-4 コデックの中でも最高画質の一つでコンスタントに進化している。速度第一ならこれ。 MPEG4 [.AVI] (mencoder)同じく "libavcodec mpeg-4"コデックを mencoder エンジンで使う。ffmpegと比べると、より先進的なエンコードオプション、NTSC素材での映像/音声同期 の確実さ、フィルタ、字幕、自動クロップなどに優れる。反面、速度はffmpegよりかなり落ちる。これらの進んだ機能や、画質第一ならこっち。 注意点:ffmpegXの mencoder.AVIが作るのは AVI 1.0。最大サイズ 2GBまでという制限がある。 XviD [.AVI] (mencoder)XviD コデックは現在すべてのプラットフォームで良く見られる mpeg-4 コデック。 注意点:ffmpegXの mencoder.AVIが作るのは AVI 1.0。最大サイズ 2GBまでという制限がある。 DivX 3 [.AVI] (ffmpeg)libavcodec ファミリーに移植されたDivX3コデック。画質は上位コデックに劣る。このコデックはDivX3しか再生できない環境との互換性のために有る。 DivX 3 [.AVI] (mencoder)上に同じ。mencoderエンジン使用 MsMPEG4v2 [.AVI] (ffmpeg)古いコデック MsMPEG4v1 [.AVI] (ffmpeg)さらに古いコデック MPEG1 [.MPG] (ffmpeg)MPEG-1 はVCD規格のフォーマット。CDRに焼いてVCD-互換の DVD プレイヤでTVで見る事ができる。パソコンでしか見る事が無いなら MPEG-4のほうが同じ画質でより小さなサイズ、ビットレートにできる。ffmpegのMPEG-1エンコーダは非常に画質も良く、速度も早い。 MPEG1 [.MPG] (mpeg2enc)mpeg2enc エンジンはVCDのために完璧な MPEG-1規格にそったエンコードを行う。 MPEG2 [.MPG] (ffmpeg)ffmpeg エンジンの "fast mpeg-2" エンコードは長足の進歩を遂げた。2パスとVBR をサポートし、非常に早い。SVCD と DVD 作成もサポート。 MPEG2 [.MPG] (mpeg2enc)MPEG-2 は SVCD, CVD (CDRに焼いてSVCD-CVD 互換の DVD プレイヤでTVで見る事ができる) DVDの標準形式。mpeg2enc MPEG-2 エンジンは、Altivec に最適化され、多数のオプションを備える。 CVD とSVCD 作成に非常に良い。 Passthrough (ffmpeg)素材の映像をエンコードせず、出力ファイルに単純コピーする。映像はそのままに、音声だけ変換したい際に使う。 H.263 [.3GP] (ffmpeg)ffmpeg エンジンの "H263 (3GP)" エンコードは、スマートフォンや互換性のあるハンドヘルド用。搭載メモリの少ない機器向けに、非常に低いビットレートに最適化されている。"3GP" クイックプリセットはデフォルト設定。最適な画質を得るには、再生する携帯のスペックに応じて設定を変え、ffmpegX プリセットファイルに保存する事。Bluetoothがあれば、Apple Bluetooth File Exchange 経由で簡単に.3gp ファイルを対象機器に送る事が出来る。注意点:携帯によってはビデオ再生ソフトのインストールが必要。 (自分の携帯会社のサイトで調べる事)。これとは別に、Smartmovieプレイヤーを持った携帯向けには、単にDivX/XviD コデックで適切なサイズとビットレートでエンコードするだけで済む。 (これも携帯用設定をプリセットに保存しておく事)。 DV [.DV] (ffmpeg)ffmpeg エンジンの "DV" ビデオは、PALとNTSCフレームレートをサポートする標準の DV コデック。音声は PCM 。かならず素材ファイルを先に指定し、次にクイックプリセットを選んで設定を変更しない事:画像サイズ変更不可、ビットレート計算機でのビットレート指定も不可。 XviD [.AVI] (ffmpeg)ffmpeg エンジンから使う "XviD"コデックは mencoder XviDと同じ。利点は速度でmencoder XviDより最大で300%早い。速度第一、mencoderの字幕、やフィルタ機能が要らない場合むけ。 MPEG4 [.MOV] (ffmpeg)ffmpeg AVI MPEG4とコデックは同じ。MOVコンテナに出力する。これでQuicktime Player やFinal Cut Proなど、他のQuicktime アプリケーションで再生、編集可能になる。追加の DivX コデックは不要。 (注意点: MOV フォーマットは PCやQuicktime非互換の DivX-ハードウェアプレイヤで再生できない事があり得る)。デフォルト設定でAAC音声のMPEG4.MOVを作るには、"MOV mpeg-4" クイックプリセットを選ぶ。mpeg/vob ファイルを編集可能なまま小さくしたい際や、テラバイトのストレージ抜きでアーカイブ化する際に使う。また、巨大な .DV キャプチャを編集可能なまま非常に小さくしたい際なども同様。 (DVを変換する際は "Deinterlace" を使う事)。 PC/DivX ハードウェアプレイヤとの互換性よりも、Quicktime MOV コンテナで残してQuicktimeで再生し、Quicktime の優れた機能とその上のアプリケーションの利点を享受したい際などに使う。 XviD [.MOV] (ffmpeg)上に同じ。コデックがXviD MPEG4 [.MP4] (ffmpeg)ffmpeg AVI MPEG4とコデックは同じ。コンテナにMPEG-4 .MP4 を使う。AAC 音声と共に使う事。 XviD4 [.MP4] (ffmpeg)ffmpeg AVI XviDとコデックは同じ。コンテナにMPEG-4 .MP4 を使う。AAC 音声と共に使う事。 MPEG-TS [.TS] (ffmpeg)ffmpeg mpeg-2とコデックは同じ。コンテナにmpeg transport stream (.TS) を使う。MP2 音声と共に使う事。(試験的実装の為、ハードウェアデコーダで再生できないかも知れない)。 H264 [.MP4] (mencoder)H.264/Advanced Video Codec、コンテナはMP4、音声はAAC 。素晴らしい画質とmpeg-4よりも小さなファイルサイズ。なお、ffmpegXが使うコデックはx264。 ビデオエンコードのオンオフ。素材の音声だけ抜き出したい時に使う。ffmpeg のみで動作。 3.2. ビットレート計算機 ビットレート計算機は映像ビットレートの計算に使う。 ここに入力したvideo bitrateの値が、映像部分をエンコードする際に使われる。例えば 1000 kbit/sec なら、1秒ぶんの映像に1000 kbit 消費する。(概ね 24〜 30 枚の映像になる。枚数は framerate で指定する。従って、同じビットレートでもフレームレートが低ければ画質は向上する)。 しかし、エンコーダが必ずこの数値をコンスタントに守るわけでは無い。実際の結果数値は、エンコードエンジンのレートコントロールシステム、他のエンコード設定などの影響を受ける。例えば VBR モードでは実際のビットレートは素材映像の内容によって大きく変動する。 "Best":先に Video Size (通常は素材と同じか縮小)と、 Framerate を選んでから押す。そこから"Best"な値を出して Video Bitrae 欄に入れる。 "Rate":指定された長さ(min)の映像が指定されたCD枚数やファイルサイズ(MB)に収まるように Video Bitrae を計算(音声ビットレートも計算に含まれる)。必ず、 "Best" の数値と比べ、かけ離れた数値を使わないようにする事(上でも下でも)。 "Time":上記の反対。指定されたCD枚数やファイルサイズ(MB)に何分入るかを、現在の設定を元に計算する(音声含む)。 "Best" に続けて "Time"を押すと、ベストのビットレートでエンコード可能なmin数が解る。 "Size":入力されたビットレートと継続時間(素材の長さ)から出力結果ファイルのサイズ(MB)を計算。 "Img":ビットレートとフレームレート、アスペクトレシオを元にVideo Sizeを計算する。(素材映像より大きくしたり、手持ちの再生機器の画面サイズより大きくしないこと)。 "Auto":選択したCD容量を無駄無く満たすビットレートと解像度をbppを使って算出、入力する。Audio tabで指定した音声ビットレートも含む。もしも横幅が480以下になったら、画質はSVCD品質より下がる。240以下になったらVCD以下。したがって、こうした場合はメディアサイズを増やすべきだろう(1CDのつもりだったら2枚にするとか)また、解像度は素材映像より決して大きくしない方が良い。 "Auto" と "Img"はmpeg-4 ベースのフォーマット (DivX, XviD)専用で、mpeg-1/2 ベースのフォーマットには使えない (VCD, CVD, SVCD, DVD)。これらの解像度は規格通りでなければならない。 Video bitrateの数字には色がつく。赤:ビットレート低すぎ。ビットレートを上げるか、解像度を縮小する。 緑:適正範囲。ビットレートも解像度もOK。 青:ビットレート高すぎ。緑との画質差が無い。無駄。ビットレートを下げるか、解像度を拡大(素材より大きくならないように)する。 3.3. Video parameters 出力映像の解像度、アスペクト比(縦横比)、フレームレートの指定。通常のTV放送は640x480(4:3)にするのが一般的。上下に黒帯の入った映画は16:9。この場合、黒帯はクロップする。フレームレートは通常NTSC(29.97fps)。NTSC FILM(23.976fps)は映画やアニメ向き。 Video Size:幅 x 高さ。単位pixel。16の倍数でなければ、大半のコデックで適正に動作しない。 Auto Size:幅を元に高さを自動計算。MPEG2を出力する場合、16:9にするとアスペクト比のフラグも書き込む。(図は横幅640を元に映画向けのシネスコサイズにしたところ。) Framerate:出力映像のフレームレートを指定。PAL - NTSC間の変換は音ズレを生みやすい。 3.4. その他のオプション DVDやらない為、未経験 Title,Chap,Angle:mencoderエンジンでVIDEO_TSの入力パラメータを指定。 名前 コメント
https://w.atwiki.jp/futada/pages/25.html
FFmpegコンパイル FFmpegのコンパイルとついでにデバッグについて コンパイルと実行 今回バージョンは、0.5を使いました。 コンパイルは、 $ wget http //ffmpeg.org/releases/ffmpeg-0.5.tar.bz2 $ bzip2 -dc ffmpeg-0.5.tar.bz2 | tar xvf - $ cd ffmpeg-0.5/ $ ./configure $ make 実行(test.mpgをBMPへエンコードする場合)は、 $ ./ffmpeg -i "test.mpg" -vcodec bmp "%05d.bmp" configureオプションによる違い 特にFFmpegをデバッグする際に必要なconfigureオプションについて確認しておきます。 何もつけず $ ./configure $ make ... gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -fomit-frame-pointer -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -O3 -fno-math-errno -fno-signed-zeros -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c ... gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl cp -p ffmpeg_g ffmpeg strip ffmpeg ... --disable-optimizations $ ./configure --disable-optimizations $ make ... gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -fno-math-errno -fno-signed-zeros -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c ... gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl cp -p ffmpeg_g ffmpeg strip ffmpeg ... コンパイル時にO3とfomit-frame-pointerがつかなくなる。 --disable-optimizations --disable-stripping $ ./configure --disable-optimizations --disable-stripping $ make ... gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I. -I"/home/futada/ffmpeg-0.5" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -std=c99 -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wtype-limits -Wundef -fno-math-errno -fno-signed-zeros -c -o libavcodec/mpeg12.o libavcodec/mpeg12.c ... gcc -L"/home/futada/ffmpeg-0.5"/libavdevice -L"/home/futada/ffmpeg-0.5"/libavformat -L"/home/futada/ffmpeg-0.5"/libavcodec -L"/home/futada/ffmpeg-0.5"/libavutil -rdynamic -export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libpostproc -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libswscale -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavfilter -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavdevice -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavformat -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavcodec -Wl,-rpath-link,"/home/futada/ffmpeg-0.5"/libavutil -Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil -lm -ldl -ldl cp -p ffmpeg_g ffmpeg echo ignoring strip ffmpeg ... ffmpegにstrip(シンボルの削除)が行われなくなる。 デバッグ emacsでgdbを使うと楽です。 M-x gdbで以下のようにffmpegを指定します。 Run gdb (like this) gdb --annotate=3 ffmpeg main関数にブレークポイントを張っておきます。 b main デバッグを始めるには、以下のコマンドを入力します。 r -i "test.mpg" -vcodec bmp "%05d.bmp"
https://w.atwiki.jp/hondashi/pages/45.html
Introduction このガイドは徹底的に色々やってます もしオープンソースのプログラムをコンパイルする知識があるなら FFmpeg General Documentation読んでみればいいと思うよ より小さい構成、少ない設定で動くよ でもどんな問題が起きてもFFmpegのバグトラッカーやメーリングリストに報告する前に この徹底的なガイド(本家英語の方のことです)を完璧に読め このガイドは超簡単です(たまにちょっと複雑)、エラーが出るような余地が無いように努めてます 正確になぞっていってくれれば、全く問題なくWindows上でFFmpegができるでしょう 何を報告する前にもあなた自身の問題を解決するのにベストを尽くしてください FFmpegの開発者達の多くはWindowsを使ってませんので、助けになりません。全くです 前へ(Main Page) 次へ(Preparing the MSys+MinGW system)
https://w.atwiki.jp/esperance/pages/12.html
How to use libavcodecs FFmpegが提供する、libavcodecsについて説明を行っていく。 libavodec概要 open input movie 入力されるファイルを開く前に、libavcodec(ffmpeg)が持つ機能を有効にするために、おまじないをする必要がある。そして、その後で入力されるファイルを、libavcodecが提供する関数で開く。 有効なコーデックをアクティベートする 入力ファイルを開き、基本的な情報にアクセスする 有効なコーデックをアクティベートする avcodec_register_all(); // おまじない その1 av_register_all(); // おまじない その2 入力ファイルを開き基本的な情報にアクセスする AVFormatContext *avFormatCtx; const char *filename = "キャプチャ.m2p"; AVFormatParameters = *avFormatPrm; av_open_input_file( avFormatCtx, filename, NULL, // AVInputFormat NULLでOK 0, // buf_size 0でOK avFormatPrm); av_find_stream_info(avFormatCtx); // 簡単なパース で開く。これは、メディアを開いた状態で、デコードに必要なコーデック等はまだ開いておらず、この後で徐々に必要な情報にアクセスし、コーデックを有効にしていく。また、メディア情報のダンプが成功するようになっており、ターミナルにムービーの情報を出力することができる。 dump_format(avFormatCtx, 0, filename, false); ターミナルへの出力 以下工事中 open codecs 入力ファイルにアクセスし、どのコーデックをオープンすれば良いかを得て、コーデックをオープンする過程を説明する。繁雑なので、特にビデオコーデックのみを開くコードを記述していく。 入力ストリームのビデオストリームへアクセスする 最適なビデオデコーダーを得る いよいよコーデックをオープンする 入力ストリームのビデオストリームへアクセスする for(int i=0; i avFormatCtx- nb_streams; i++) { int type = avFormatCtx- streams[i]- codec- codec_type; if (type == CODEC_TYPE_VIDEO) { videoStream = i; // 映像 } else if (type == CODEC_TYPE_AUDIO) { audioStream = i; // 音声 } else { ; // なんでしょ } } 先ほど得られた、AVFormatContextのメンバ nb_streamsの回数だけループし、int type =,,,,のようにしてそのメディアが、ビデオなのか、オーディオなのかを判定する。コード中のvideoStreamが映像のトラック番号を保持することになる。 最適なビデオデコーダーを得る vCodecCtx = avFormatCtx- streams[videoStream]- codec; vCodec = avcodec_find_decoder(vCodecCtx- codec_id); 実際に、vCodecCtxにビデオメディアの情報(サイズ、FPS等)がセットされ、vCodecがコーデックそのものを指すようになる。 いよいよコーデックをオープンする avcodec_open(vCodecCtx, vCodec); だけ。対応するコーデックがない場合、エラーで落ちる。 これで、デコードをするためのコーデックを得ることができた。後は、ムービーをリードし、正しくデコードしてあげるだけだ。 read packet 通常ムービーのパケットを読み込む方法には、2種類ある。1つ目は、1パケットずつ読み込み、必要なパケット数がたまった段階で、デコードを行う方法である。2つ目は、ビデオ1フレームに必要なパケットを一気に読み込みデコードを行う方法である。この区別はlibavcodecが提供する関数に基づく。 2つ目の方法の方が簡単で制御がしやすい半面、パケットの正確で高精度なタイムコード、すなわち(多分)PTSを得ることが不可能であるが、DTSは簡単に得ることができる。 私は手抜きで、この2つ目の方法を用いている。 典型的な流れは以下のとおり、 int size; int dts; uint8_t* data; // if = -1 end of file while (av_read_frame(avFormatCtx, packet) -1) { dts = packet.duration; data = packet.data; size = packet.size; if (packet.stream_index == videoStream) { decodeVideo(data); } else if (packet.stream_index == audioStream) { decodeAudio(data); } } つまり、av_read_frame()で、ビデオまたはオーディオ1フレーム(ビデオなら1枚、オーディオなら2048サンプルとか)を1度で準備し、デコードルーチンへそのデータを渡す。 デコードの基本動作はこの処理を繰り返すことにある。 decode デコードを行う際は、前の工程、すなわちリードしたパケットを入力する。ここでは、映像、音声それぞれのデコードの説明を行う。 映像のデコード avcodec_decode_video(vCodecCtx, YUVData, doneVideo, inputVideoData, inputVideoDataSize); 第1引数 vCodecCtxは、初期に開いたコーデック。第4引数 inputVideoDataは、packet.data つまりリードされたデータである。イメージとして、デコードされていないmpeg2のパケットデータなどである。第5引数 inputVideoDataSizeは、そのmpeg2パケットは一体何バイトであるのかという情報をデコードコーデックに引きわたす。 さて、説明を飛ばした第2・3引数であるが、簡単な第3引数から。第3引数 doneVideo は、ビデオパケットをデコードした結果、YUV形式の画像をデコードできたかを教えてくれる。通常、画像を得るまでには、2〜3枚ほどの入力フレームが必要になる。よって、この値が0以外であった場合に、デコードできた、と判定できる。 最後に、第2引数であるが、BMPファイルはみなさんごぞんじであろう。あれと同じで、人間が目で判別できる形式で、このYUVDataにデコード結果がセットされる。いわゆるrawデータである。 このYUVDataを得ることができるので、libx264を用いたエンコードの入力画像として渡してあげることができる。 音声のデコード avcodec_decode_audio(aCodecCtx, (short *)PCMData, decodedSamples, inputAudioData, inputAudioDataSize); 第1・4・5引数は、先ほどのビデオと同じ。 第3引数 decodedSamples は先ほどの doneVideoとは異なり、この変数にデコードされたサンプル数がセットされる。0であった場合は当然、デコードしたがまだ結果を得られていない状態である。 第2引数 PCMData にWAVEでお馴染のエンコードされていない、生データがセットされる。(shot *)でバッファを渡すにはわけがあり、ステレオ2チャンネルのとき、32bitデータを考えた場合に、上位16bitに右の音声、下位16bitに左の音声が記録される。そのため、キャストをしている。 deinterlace libavcodecが提供する関数を用いることで、容易にインターレースの解除を行うことが出来る。デコードの結果得られたYUVデータと、縦横、そしてフォーマットを指定すれば良い。 AVPicture deinterlacedYUVData; avpicture_deinterlace( deinterlacedYUVData, (AVPicture*)YUVData, PIX_FMT_YUV420P, width, height); resample まとめのコード